﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ApuestaJMG.GUI.Contrato;
using Datos.Entidades;
using ApuestasJMG.GUI.Contrato;
using Logica.Comandos.AdministracionUsuarios;
using Datos.Entidades.FabricaEntidades;
using Logica.Comandos;
using Logica.FabricaLogica;
using System.Windows.Forms;
using System.Security.Cryptography;
using log4net;

namespace ApuestasJMG.GUI.Presentador
{
    public class PresentadorCrearUsuario
    {
        private IContratoCrearUsuario _crearUsuario;
        #region Logger
        private static readonly ILog log = LogManager.GetLogger(
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);





        #endregion 
        List<Entidad> listaroles = new List<Entidad>();
        /// <summary>
        /// Constructor de la clase
        /// </summary>
        /// <param name="creacionUsuario">
        /// Datos de la página de creación de usuario requeridos para crear un
        /// nuevo usuario
        /// </param>
        

        public PresentadorCrearUsuario
            (IContratoCrearUsuario creacionUsuario)
        {
            _crearUsuario = creacionUsuario;
        }


        # region Metodos
        public Entidad UltimoUsuarioAgregado()
        {
            Entidad usuario = FabricaEntidades.ObtenerUsuario();
            Comando comando = FabricaComandoUsuario.ObtenerComandoMaxUsuario();
            (comando as ComandoConsultarMaxUsuario).Ejecutar();
            usuario = comando.Entidad;

            return usuario;
        }

        public static String GetMD5Hash(String input)
        {
            MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
            bs = x.ComputeHash(bs);
            System.Text.StringBuilder s = new System.Text.StringBuilder();
            foreach (byte b in bs)
            {
                s.Append(b.ToString("x2").ToLower());
            }
            String hash = s.ToString();

            return hash;
        }

        public void MostrarRoles()
        {

            Comando consultarroles = FabricaComandoUsuario.ObtenerRolesDisponibles();
            consultarroles.Ejecutar();
            listaroles = consultarroles.ListaEntidad;

            if (listaroles != null)
            {

                for (int i = 0; i < listaroles.Count; i++)
                {

                    _crearUsuario.rol.Items.Add((listaroles.ElementAt(i) as Rol).NombreRol);


                }

                _crearUsuario.rol.DataBind();


            }



        }
        public bool Validacion()
        {
            bool respuesta = false;
            
            String nombre =_crearUsuario.nombre.Text;
            String apellido = _crearUsuario.apellido.Text;
            int cedula = int.Parse(_crearUsuario.cedula.Text);
            String email = _crearUsuario.email.Text;
            String clave = _crearUsuario.clave.Text;
            Int64 telefono = Int64.Parse(_crearUsuario.telefono.Text);
         
            String rol =_crearUsuario.rol.Text;
            String login = _crearUsuario.login.Text;

            

            DialogResult result;

            MessageBoxIcon mci = new MessageBoxIcon();


            string mensaje = ("Nombre : " + nombre + '\n' + "Apellido : " + apellido + '\n' + "Cedula : " + cedula + '\n'
                + "Telefono :" + telefono + '\n' + " Email :" + email + '\n' + " Login: " + login + '\n'
                + "Clave:  " + clave + '\n'
                + "Rol: " + rol + '\n');
            
            mci = MessageBoxIcon.Information;
            MessageBox.Show(mensaje, "Registro de usuario",
               MessageBoxButtons.OKCancel, mci);


          /*  result = MessageBox.Show("Nombre : " + nombre + '\n' + "Apellido : " + apellido + '\n' + "Cedula : " + cedula + '\n'
                + "Telefono :" + telefono + '\n' + " Email :" + email + '\n' + " Login: " + login + '\n'
                + "Clave:  " + clave + '\n'
                + "Rol: " + rol +'\n', "Validacion de datos ", MessageBoxButtons.OKCancel);
            */
            if (mci == System.Windows.Forms.MessageBoxIcon.Information)
            {
                respuesta = true;

            }
            return respuesta;
        }
       
       
        public void InsertarUsuarioNuevo(int PosRol)
        {
            bool respuesta = false;
            Entidad crearUsuario = FabricaEntidades.ObtenerUsuario();
            String Estatus = "Activo";
     
           
            (crearUsuario as Usuario).Nombre = _crearUsuario.nombre.Text;
            (crearUsuario as Usuario).Apellido = _crearUsuario.apellido.Text;
            (crearUsuario as Usuario).Cedula = int.Parse(_crearUsuario.cedula.Text);
            (crearUsuario as Usuario).Fk_Id_Rol = (listaroles.ElementAt(PosRol) as Rol).Id_Rol;
            (crearUsuario as Usuario).Telefono = Int64.Parse(_crearUsuario.telefono.Text);

            (crearUsuario as Usuario).Email = _crearUsuario.email.Text;
            (crearUsuario as Usuario).Clave = _crearUsuario.clave.Text;
            (crearUsuario as Usuario).Login = _crearUsuario.login.Text;
            (crearUsuario as Usuario).Estatus = Estatus;
            string claveCifrada=GetMD5Hash(_crearUsuario.clave.Text);
            (crearUsuario as Usuario).ClaveCifrada = claveCifrada;
            log.Info("Se encripto la clave:  " + claveCifrada);
           
            Comando comandoUsuario = FabricaComandoUsuario.ObtenerComandoInsertarUsuario();
            comandoUsuario.Entidad = crearUsuario;
            Boolean respuestaUsuario = false;

            (comandoUsuario as InsertarUsuario).Ejecutar();
            respuestaUsuario = comandoUsuario.Flag;

          
            
            int longitud = claveCifrada.Length;
           
       }

       
        
        #endregion

    }

}